// pages/result/result.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    type: '',
    imageData: '',
    originalImage: '',
    prompt: '',
    style: '',
    imageSize: '',
    numInferenceSteps: '',
    guidanceScale: '',
    negativePrompt: '',
    functionNames: {
      'text': '文本生成照片',
      'style': '照片风格转换'
    },
    // 风格名称映射
    styleNames: {
      'cartoon': '漫画风',
      'oil_painting': '油画',
      'sketch': '素描',
      'ink_painting': '水墨',
      'watercolor': '水彩',
      'anime': '动漫',
      'pixar': '皮克斯',
      'cyberpunk': '赛博朋克'
    },
    pageTitle: '',
    resultImage: '', // 结果图片
    isProcessing: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // console.log('结果页面加载，参数：', options);

    // 解码URL参数
    const decodedOptions = {};
    Object.keys(options).forEach(key => {
      if (options[key]) {  // 只解码非空值
        decodedOptions[key] = decodeURIComponent(options[key]);
      }
    });

    // 设置页面数据，确保所有字段都有默认值
    this.setData({
      type: decodedOptions.type || '',
      imageData: decodedOptions.imageData || '',
      originalImage: decodedOptions.originalImage || '',
      prompt: decodedOptions.prompt || '',
      style: decodedOptions.style || '',
      imageSize: decodedOptions.image_size || '',
      numInferenceSteps: decodedOptions.num_inference_steps || '',
      guidanceScale: decodedOptions.guidance_scale || '',
      negativePrompt: decodedOptions.negative_prompt || '',
      resultImage: decodedOptions.imageData || '',
      isProcessing: false
    });

    // 如果是文本生成照片，保存到历史记录
    if (decodedOptions.type === 'text' && decodedOptions.imageData) {
      this.saveToHistory({
        type: 'text',
        title: decodedOptions.prompt || '文本生成照片',
        image: decodedOptions.imageData,
        date: new Date().toLocaleString(),
        prompt: decodedOptions.prompt || '',
        image_size: decodedOptions.image_size || '',
        num_inference_steps: decodedOptions.num_inference_steps || '',
        guidance_scale: decodedOptions.guidance_scale || '',
        negative_prompt: decodedOptions.negative_prompt || ''
      });
    }

    // 如果是风格转换，保存到历史记录
    if (decodedOptions.type === 'style' && decodedOptions.imageData) {
      this.saveToHistory({
        type: 'style',
        title: `风格转换: ${this.data.styleNames[decodedOptions.style] || decodedOptions.style || '未知风格'}`,
        image: decodedOptions.imageData,
        date: new Date().toLocaleString(),
        style: decodedOptions.style || '',
        image_size: decodedOptions.image_size || '',
        num_inference_steps: decodedOptions.num_inference_steps || '',
        guidance_scale: decodedOptions.guidance_scale || '',
        negative_prompt: decodedOptions.negative_prompt || ''
      });
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 保存图片到相册
   */
  saveImage() {
    wx.showLoading({
      title: '保存中...',
    });

    const imageUrl = this.data.resultImage || this.data.imageData;
    // console.log('准备保存图片，URL:', imageUrl);

    if (!imageUrl) {
      wx.showToast({
        title: '无效图片',
        icon: 'error'
      });
      wx.hideLoading();
      return;
    }

    // 获取用户openId
    const app = getApp();
    const userOpenId = app.getUserOpenId();

    if (!userOpenId) {
      wx.showToast({
        title: '请先登录',
        icon: 'error'
      });
      wx.hideLoading();
      return;
    }

    // 判断是否为云存储fileID
    if (imageUrl.startsWith('cloud://')) {
      // 云存储fileID，直接下载并保存
      wx.cloud.downloadFile({
        fileID: imageUrl,
        success: (res) => {
          wx.saveImageToPhotosAlbum({
            filePath: res.tempFilePath,
            success: () => {
              wx.showToast({
                title: '保存成功',
                icon: 'success'
              });
              wx.hideLoading();
              // 保存作品到本地存储
              this.saveWorkToLocal();
            },
            fail: (err) => {
              wx.showToast({
                title: '保存失败',
                icon: 'error'
              });
              console.error('保存失败：', err);
              wx.hideLoading();
            }
          });
        },
        fail: (err) => {
          wx.showToast({
            title: '下载失败',
            icon: 'error'
          });
          console.error('下载云存储文件失败：', err);
          wx.hideLoading();
        }
      });
    } else {
      // 网络URL，先下载再上传到云存储，然后保存到相册
      wx.downloadFile({
        url: imageUrl,
        success: (res) => {
          // console.log('下载图片结果：', res);
          if (res.statusCode === 200) {
            // 生成时间戳作为文件名
            const timestamp = (new Date()).valueOf();
            let cloudPath = '';
            let dbType = '';

            // 根据类型选择不同的云存储路径和数据库type字段
            if (this.data.type === 'text') {
              cloudPath = `spawnWorkshop/textGeneratesPhotos/${timestamp}.png`;
              dbType = 'text_to_photo';
            } else if (this.data.type === 'style') {
              cloudPath = `spawnWorkshop/photoStyleConversion/${timestamp}.png`;
              dbType = 'style_transfer';
            } else {
              // 其他类型直接保存到相册，不上传到云存储
              wx.saveImageToPhotosAlbum({
                filePath: res.tempFilePath,
                success: () => {
                  wx.showToast({
                    title: '保存成功',
                    icon: 'success'
                  });
                  wx.hideLoading();
                  // 保存作品到本地存储
                  this.saveWorkToLocal();
                },
                fail: (err) => {
                  wx.showToast({
                    title: '保存失败',
                    icon: 'error'
                  });
                  console.error('保存失败：', err);
                  wx.hideLoading();
                }
              });
              return; // 直接返回，不执行后续的云存储上传
            }

            // 上传到云存储
            wx.cloud.uploadFile({
              cloudPath: cloudPath,
              filePath: res.tempFilePath,
              success: (uploadRes) => {
                // console.log('图片上传到云存储成功:', uploadRes.fileID);

                // 存储到云数据库
                const db = wx.cloud.database();
                db.collection('spawnWorkshop').add({
                  data: {
                    userOpenId: userOpenId,
                    path: uploadRes.fileID,
                    type: dbType
                  }
                }).then((dbRes) => {
                  // console.log('数据存储到云数据库成功:', dbRes);
                }).catch((dbErr) => {
                  console.error('数据存储到云数据库失败:', dbErr);
                });

                // 更新本地存储中的图片URL为云存储fileID
                this.setData({
                  resultImage: uploadRes.fileID
                });

                // 保存到相册
                wx.saveImageToPhotosAlbum({
                  filePath: res.tempFilePath,
                  success: () => {
                    wx.showToast({
                      title: '保存成功',
                      icon: 'success'
                    });
                    wx.hideLoading();
                    // 保存作品到本地存储
                    this.saveWorkToLocal();
                  },
                  fail: (err) => {
                    wx.showToast({
                      title: '保存失败',
                      icon: 'error'
                    });
                    console.error('保存失败：', err);
                    wx.hideLoading();
                  }
                });
              },
              fail: (uploadErr) => {
                console.error('上传到云存储失败:', uploadErr);
                // 即使云存储上传失败，也尝试保存到相册
                wx.saveImageToPhotosAlbum({
                  filePath: res.tempFilePath,
                  success: () => {
                    wx.showToast({
                      title: '保存成功（未上传到云存储）',
                      icon: 'success'
                    });
                    wx.hideLoading();
                    // 保存作品到本地存储
                    this.saveWorkToLocal();
                  },
                  fail: (err) => {
                    wx.showToast({
                      title: '保存失败',
                      icon: 'error'
                    });
                    console.error('保存失败：', err);
                    wx.hideLoading();
                  }
                });
              }
            });
          } else {
            wx.showToast({
              title: '下载图片失败',
              icon: 'error'
            });
            wx.hideLoading();
          }
        },
        fail: (err) => {
          wx.showToast({
            title: '下载图片失败',
            icon: 'error'
          });
          console.error('下载图片失败：', err);
          wx.hideLoading();
        },
        complete: () => {
          // 保底关闭 loading
          wx.hideLoading();
        }
      });
    }
  },

  /**
   * 保存作品到本地存储
   */
  saveWorkToLocal() {
    const now = new Date();
    const newWork = {
      id: Date.now(),
      type: this.data.type,
      image: this.data.resultImage,
      title: this.data.type === 'style'
        ? `风格: ${this.data.styleNames[this.data.style] || this.data.style}`
        : `描述: ${this.data.prompt}`,
      date: `${now.getFullYear()}-${(now.getMonth() + 1).toString().padStart(2, '0')}-${now.getDate().toString().padStart(2, '0')}`,
      timestamp: now.getTime(),
      image_size: this.data.imageSize,
      num_inference_steps: this.data.numInferenceSteps,
      guidance_scale: this.data.guidanceScale,
      negative_prompt: this.data.negativePrompt,
      prompt: this.data.prompt
    };

    try {
      const works = wx.getStorageSync('myWorks') || [];
      works.unshift(newWork); // 将新作品添加到列表开头
      wx.setStorageSync('myWorks', works);
      // console.log('作品已保存到本地存储', newWork);
    } catch (e) {
      console.error('保存作品到本地存储失败', e);
    }

    // 保存成功后跳转回首页
    wx.switchTab({
      url: '/pages/home/home',
      success: () => {
        // console.log('成功跳转回首页');
      },
      fail: (err) => {
        console.error('跳转回首页失败', err);
      }
    });
  },

  /**
   * 分享图片
   */
  shareImage() {
    wx.showShareMenu({
      withShareTicket: true,
      menus: ['shareAppMessage', 'shareTimeline']
    });
  },

  /**
   * 返回上一页或首页
   */
  goBack() {
    // 如果有页面栈则返回上一页，否则回首页
    const pages = getCurrentPages();
    if (pages.length > 1) {
      wx.navigateBack();
    } else {
      wx.switchTab({ url: '/pages/home/home' });
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    const functionName = this.data.functionNames[this.data.type] || 'AI生成';
    return {
      title: `${functionName} - 照片魔法工坊`,
      path: '/pages/home/home'
    };
  },

  /**
   * 用户点击右上角分享到朋友圈
   */
  onShareTimeline() {
    const { type, imageData, prompt, style } = this.data;
    return {
      title: type === 'style' ?
        `我的${this.data.styleNames[style] || style}风格照片` :
        `AI生成的图片：${prompt}`,
      query: '',
      imageUrl: imageData
    };
  },

  /**
   * 保存到历史记录
   */
  saveToHistory(work) {
    try {
      // 获取现有历史记录
      let history = wx.getStorageSync('works') || [];

      // 添加新作品
      history.unshift({
        id: Date.now().toString(),
        ...work
      });

      // 限制历史记录数量
      if (history.length > 50) {
        history = history.slice(0, 50);
      }

      // 保存更新后的历史记录
      wx.setStorageSync('works', history);

      //   console.log('保存成功，当前历史记录数量：', history.length)
    } catch (error) {
      console.error('保存历史记录失败：', error);
    }
  },

  // 预览图片
  previewImage() {
    const imageUrl = this.data.imageData;

    // 判断是否为云存储fileID
    if (imageUrl.startsWith('cloud://')) {
      // 云存储fileID，先获取临时URL再预览
      wx.cloud.getTempFileURL({
        fileList: [imageUrl],
        success: (res) => {
          if (res.fileList && res.fileList[0] && res.fileList[0].tempFileURL) {
            wx.previewImage({
              urls: [res.fileList[0].tempFileURL],
              current: res.fileList[0].tempFileURL
            });
          } else {
            wx.showToast({
              title: '预览失败',
              icon: 'error'
            });
          }
        },
        fail: (err) => {
          console.error('获取临时URL失败：', err);
          wx.showToast({
            title: '预览失败',
            icon: 'error'
          });
        }
      });
    } else {
      // 网络URL，直接预览
      wx.previewImage({
        urls: [imageUrl],
        current: imageUrl
      });
    }
  }
})